home *** CD-ROM | disk | FTP | other *** search
/ Aminet 41 / Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso / Aminet / dev / c / libiconv_src.lha / src / gb18030.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-11-07  |  1.3 KB  |  62 lines

  1. /*
  2.  * GB18030
  3.  */
  4.  
  5. /*
  6.  * GB18030, as implemented in glibc-2.2, is an extension of GBK (= CP936).
  7.  * It adds the following ranges:
  8.  * 1. Two-byte range
  9.  *    0xA2E3, 0xA8BF, 0xA98A..0xA995, 0xFE50..0xFE9F
  10.  * 2. Four-byte range
  11.  *    0x{81..84}{30..39}{81..FE}{30..39}
  12.  *    Most of Unicode plane 1 in Unicode order.
  13.  */
  14.  
  15. #include "gb18030ext.h"
  16. #include "gb18030uni.h"
  17.  
  18. static int
  19. gb18030_mbtowc (conv_t conv, wchar_t *pwc, const unsigned char *s, int n)
  20. {
  21.   int ret;
  22.  
  23.   /* Code set 0 (ASCII) */
  24.   if (*s < 0x80)
  25.     return ascii_mbtowc(conv,pwc,s,n);
  26.  
  27.   /* Code set 1 (GBK extended) */
  28.   ret = gbk_mbtowc(conv,pwc,s,n);
  29.   if (ret != RET_ILSEQ)
  30.     return ret;
  31.  
  32.   ret = gb18030ext_mbtowc(conv,pwc,s,n);
  33.   if (ret != RET_ILSEQ)
  34.     return ret;
  35.  
  36.   /* Code set 2 (remainder of Unicode) */
  37.   return gb18030uni_mbtowc(conv,pwc,s,n);
  38. }
  39.  
  40. static int
  41. gb18030_wctomb (conv_t conv, unsigned char *r, wchar_t wc, int n)
  42. {
  43.   int ret;
  44.  
  45.   /* Code set 0 (ASCII) */
  46.   ret = ascii_wctomb(conv,r,wc,n);
  47.   if (ret != RET_ILSEQ)
  48.     return ret;
  49.  
  50.   /* Code set 1 (GBK extended) */
  51.   ret = gbk_wctomb(conv,r,wc,n);
  52.   if (ret != RET_ILSEQ)
  53.     return ret;
  54.  
  55.   ret = gb18030ext_wctomb(conv,r,wc,n);
  56.   if (ret != RET_ILSEQ)
  57.     return ret;
  58.  
  59.   /* Code set 2 (remainder of Unicode) */
  60.   return gb18030uni_wctomb(conv,r,wc,n);
  61. }
  62.